package br.com.ss.seguranca.controller;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.persistence.NoResultException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import br.com.ss.seguranca.model.dao.StatusDAO;
import br.com.ss.seguranca.model.dao.UsuarioDAO;
import br.com.ss.seguranca.model.entity.Status;
import br.com.ss.seguranca.model.entity.Usuario;

@Component("usuarioHome")
@ManagedBean(name = "usuarioHome")
public class UsuarioHome {

	private static final Logger logger = LoggerFactory
			.getLogger(UsuarioHome.class);

	private Usuario usuario = new Usuario();
	private Usuario selected = new Usuario();
	private List<Usuario> usuarios;
	private List<Status> listStatus;
	private Status status;

	@Autowired
	private UsuarioDAO usuarioDAO;

	@Autowired
	private StatusDAO statusDAO;

	@PostConstruct
	public void init() {
		this.listStatus = statusDAO.list();
		this.status = new Status();
		this.usuario = new Usuario();
	}

	public String login() {
		try {

			Usuario usu = usuarioDAO.login(this.usuario);
			return "/pages/sistema/listSistema.xhtml";

		} catch (NoResultException e) {
			return "pages/usuario/login.xhtml";
		} catch (Exception e) {
			return "pages/usuario/login.xhtml";
		}
	}

	public String getMessage() {
		logger.debug("Returning message from usuario home bean");
		return "Hello from Spring";
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void save() {
		
		this.usuario.setStatus(this.status);
		
		if (this.usuario.getId() == 0)
			usuarioDAO.save(this.usuario);
		else
			usuarioDAO.merge(this.usuario);
		this.usuario = new Usuario();
		invalidateUsuarios();
		getUsuarios();
	}

	public void remove() {
		usuarioDAO.remove(this.selected);
		usuario = new Usuario();
		invalidateUsuarios();
		getUsuarios();
	}

	public String edit() {
		this.usuario = this.selected;
		this.status = this.selected.getStatus();

		this.selected = new Usuario();
		return "/pages/usuario/usuario.xhtml";
	}

	public String clean() {
		this.usuario = new Usuario();
		return "/pages/usuario/usuario.xhtml";
	}

	private void invalidateUsuarios() {
		usuarios = null;
	}

	public List<Usuario> getUsuarios() {
		if (usuarios == null) {
			usuarios = usuarioDAO.list();
		}
		return usuarios;

	}

	public List<Status> getListStatus() {
		return listStatus;
	}

	public void setListStatus(List<Status> listStatus) {
		this.listStatus = listStatus;
	}

	public Status getStatus() {
		return status;
	}

	public void setStatus(Status status) {
		this.status = status;
	}

	public Usuario getSelected() {
		return selected;
	}

	public void setSelected(Usuario selected) {
		this.selected = selected;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}
}
